parser grammar GDLParser;

options {
  language = Java;
  tokenVocab = GDLLexer;
}

@header{
  package ejercicio8;
  import java.util.ArrayList;
}

@members {
      //Lista que guarda los errores que se van produciendo durante el analisis lexico
    List<RecognitionException> errors = new ArrayList<RecognitionException>();

    //Metodo que devuelve la lista de errores que se han producido
    public List<RecognitionException> getAllErrors() {
        return errors;
    }
    
    //Metodo que comprueba si se han producido errores
    public boolean hasErrors() {
        return !errors.isEmpty();
    }

    //Metodo del analizador lexico sobrescrito para que los errores que se van
    //produciendo durante el analisis lexico en vez de mostrarse por consola
    //se guarden en la lista de errores (errors)
    @Override
    public void reportError(RecognitionException e) {
        errors.add(e);
    }
}

graph: GRAPH COLON LLAVE componentes LLAVE EOF;

componentes : (node | edge)+;

node : NODE COLON LLAVE datos_nodo LLAVE;
edge : EDGE COLON LLAVE datos_arco LLAVE;

datos_nodo : (label | title | borderstyle)+;
datos_arco : (source | target | arrowstyle)+;

label : LABEL COLON CADENA;
title : TITLE COLON CADENA;
borderstyle : BORDERSTYLE COLON BORDE;

source : SOURCE COLON CADENA;
target : TARGET COLON CADENA;
arrowstyle : ARROWSTYLE COLON FLECHA;
